﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using SISCON.Bl;
using SISCON.Vo;
using SISCON.Common;
using SISCON.Model;

namespace SISCON.Service
{
    /// <summary>
    /// Clase pasa la informacion al BL correspondiente
    /// </summary>
    [WebService(Namespace = "http://SISCON.mx/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class UserServices : System.Web.Services.WebService
    {

        private UserBL _UserBL = new UserBL();

        /// <summary>
        /// Pasa los datos al bl correspondiente , para obtener todos los usuarios
        /// </summary>
        /// <param name="sessionUUID"></param>
        /// <returns>Result Object que se envia como xml que tiene a todos los usuarios</returns>
        [WebMethod]
        [System.Xml.Serialization.XmlInclude(typeof(List<User>))]
        public ResultObject GetAllUsers(string sessionUUID)
        {
            try
            {
                return new ResultObject(_UserBL.GetAllUsers(sessionUUID), null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible obtener la lista de usuarios. Favor de intentar más tarde.");
            }
        }

        /// <summary>
        /// Pasa los datos a la capa de BL para guardar un usuarios
        /// </summary>
        /// <param name="sessionUUID">Session de un usuario</param>
        /// <param name="modifiedUserId">Id del usuario a modificar</param>
        /// <param name="loginName">Nombre del usuario</param>
        /// <param name="displayName">Nombre a desplegar</param>
        /// <param name="password">contrasenia</param>
        /// <param name="email">Mail</param>
        /// <param name="roleId">Id del rol del usuario</param>
        /// <param name="enabledStr">Enable string</param>
        /// <returns>Un Objeto que pasa a ser xml que contine si se guardo o si no se guardo el usuario</returns>
        [WebMethod]
        public ResultObject SaveUser(string sessionUUID, string modifiedUserId, string loginName, string displayName, string password, string email, string roleId,
           string enabledStr)
        {
            try
            {

                bool enabled = enabledStr.Equals("1") || enabledStr.Equals("true") ? true : false;

                _UserBL.SaveUser(sessionUUID, modifiedUserId, loginName, displayName, password, email, roleId, enabled);
                return new ResultObject("ok", null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible guardar los datos del usuario. Favor de intentar más tarde.");
            }
        }

        /// <summary>
        /// Pasa los datos a la capa de BL , para que se borre a un usuario
        /// </summary>
        /// <param name="sessionUUID">Session de un usuario</param>
        /// <param name="userId">Id del usuario</param>
        /// <returns>Un objeto en xml el cual contiene si se pudo borrar al usuario o si no</returns>
        [WebMethod]
        public ResultObject DeleteUser(string sessionUUID, string userId)
        {
            try
            {
                _UserBL.DeleteUser(sessionUUID, userId);
                return new ResultObject("ok", null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible eliminar el usuario. Favor de intentar más tarde.");
            }
        }
    }
}
